/**
 * @file validate
 */

// URL
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

// 小写字母
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

// 大写字母
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

// 字母
export function validateLetter(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

// 整形
export function validateInteger(rule, value, callback) {
  if (!value) {
    callback()
  } else if (isNaN(value)) {
    callback(new Error('请输入整数'))
  } else {
    value = +value
    if (!(/^-?\d+$/.test(value))) {
      callback(new Error('请输入整数'))
    } else {
      if (rule.max && parseInt(value) > rule.max) {
        callback(new Error('请输入小于或等于' + rule.max + '的整数'))
      }
      if (rule.min && parseInt(value) < rule.min) {
        callback(new Error('请输入大于或等于' + rule.max + '的整数'))
      } else {
        callback()
      }
    }
  }
}

// 数字
export function validateNumber(rule, value, callback) {
  if (!value) {
    callback()
  } else if (isNaN(value)) {
    callback(new Error('请输入数字'))
  } else {
    if (rule.max && parseFloat(value) > rule.max) {
      callback(new Error('请输入小于或等于' + rule.max + '的数字'))
    }
    if (rule.min && parseFloat(value) < rule.min) {
      callback(new Error('请输入大于或等于' + rule.max + '的数字'))
    } else {
      callback()
    }
  }
}

// 电话
export function validatePhone(rule, value, callback) {
  if (!value) {
    callback()
  } else if (!(/^1\d{10}$/.test(value))) {
    callback(new Error('请输入正确的手机号'))
  } else {
    callback()
  }
}

// 邮箱
export function validateEmail(rule, value, callback) {
  if (!value) {
    callback()
  } else if (!(/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value))) {
    callback(new Error('请输入正确的邮箱'))
  } else {
    callback()
  }
}

// 身份证
export function validateIdentity(rule, value, callback) {
  if (!value) {
    callback()
  } else if (!(/(^\d{15}$)|(^\d{17}(x|X|\d)$)/.test(value))) {
    callback(new Error('请输入正确的身份证号'))
  } else {
    callback()
  }
}

export default {
  url: validateURL,
  phone: validatePhone,
  email: validateEmail,
  letter: validateLetter,
  number: validateNumber,
  integer: validateInteger,
  identity: validateIdentity,
  lowerCase: validateLowerCase,
  upperCase: validateUpperCase
}
